package com.ruoyi.system.util;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicLong;

public class BookingNumberGenerator {
    // 日期时间格式化器（年月日）
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
    // 自增序列（每天重置）
    private static final AtomicLong SEQUENCE = new AtomicLong(0);
    // 最后生成编号的日期（用于检测日期变化）
    private static String lastDate = "";

    public static synchronized String generateBookingNumber() {
        // 获取当前日期时间
        LocalDateTime now = LocalDateTime.now();
        
        // 格式化日期部分（年月日）
        String datePart = now.format(DATE_FORMATTER);
        
        // 检查日期是否变化，若变化则重置序列号
        if (!datePart.equals(lastDate)) {
            SEQUENCE.set(0);
            lastDate = datePart;
        }
        
        // 生成毫秒部分的后4位
        int millis = (int) (System.currentTimeMillis() % 10000);
        
        // 生成序列号部分（6位）
        long sequenceNum = SEQUENCE.getAndIncrement();
        String sequencePart = String.format("%06d", sequenceNum % 1000000);
        
        // 组合所有部分：日期(8) + 毫秒后4位 + 序列号(6)
        return datePart + String.format("%04d", millis) + sequencePart;
    }
}